import axios from 'axios'
import store from '@/store' // 引入 Vuex store
import { config } from '../../config'
import { isExpired } from './isExpired'

// 创建 axios 实例
const axiosService = axios.create({
  timeout: config.axiosServiceTimeout // 请求超时时间
})

// 请求拦截器
axiosService.interceptors.request.use(
  async(config) =>
  {
    const userId = store.state.user.id // 从 Vuex 中获取当前用户 ID
    if (userId)
    {
      try
      {
        // 避免递归调用
        const response = await axios.get(`/node/sessions/userid/${userId}`)
        if (response.data.code)
          throw new Error('会话不合法') // 会话不存在
        if (isExpired(response.data.data.expiresAt)) // 令牌过期
          throw new Error('令牌过期')
      }
      catch (error)
      {
        console.log('this: ')
        console.log(this)
        throw new Error('会话已断开: ' + error.message) // 如果会话检查失败
      }
    }
    else
      throw new Error('用户未登录') // 抛出错误，中断请求
    return config // 如果会话检查通过，继续发送请求
  },
  (error) =>
  {
    return Promise.reject(error)
  }
)

// 响应拦截器
axiosService.interceptors.response.use(
  (response) =>
  {
    return response.data
  },
  (error) =>
  {
    return Promise.reject(error)
  }
)

export default axiosService
